package com.ccjq.shosestore.shoppingcart.dao;

import com.ccjq.shosestore.core.basedao.BaseDao;
import com.ccjq.shosestore.shoppingcart.model.SaveCartModel;
import com.ccjq.shosestore.shoppingcart.model.ShowCartModel;

import java.sql.SQLException;
import java.util.List;

public interface ShoppingCartDao extends BaseDao {

    /**
     * 向购物车中插入要添加的商品ID 商品数量  用户ID(从Model层的SaveCartModel模型中得到)
     *
     * @param saveCartModel 要添加购物车数据的模型
     * @return 受影响的行数
     * */
    int addCart(SaveCartModel saveCartModel);

    /**
     * 通过用户ID  查出购物车界面要展示的商品信息   (T_PRODUCT和T_SHOPPING_CART连表查询)
     *
     * @param userId 用户ID
     * @return 购物车商品的集
     * */
    List<ShowCartModel> queryCartById(String userId);

    /**
     * 通过的购物车Id  删除指定的商品
     *
     * @param shoppingCartId 购物车ID
     * @return 受影响的行数
     * */
    int delCartById(String shoppingCartId);

    /**
     * 更新购物车数量的操作   通过购物车ID 和  获取到的文本框中的值
     *
     * @param  quantity 更新后的数量
     * 		   shoppingCartId 购物车ID
     * @return 受影响的行数
     * */
    int updateCartById(int quantity, String shoppingCartId);

    /**
     * 通过商品ID 查询商品库存量  目的是和要结算的商品数量比较，
     * 只能在库存量大于要添加的数量才可以执行结算
     *
     * @param productId 商品ID
     * @return 商品库存量
     *
     * */
    int queryStockById(String productId);

    /**
     * 提交订单时通过商品ID和提交的商品数量   修改商品库存
     *
     * @param quantity 要购买的商品数量
     * 		  productId 商品ID
     * @return 受影响的行数
     * @exception SQLException 选择抛出异常 然后进行事务回滚
     * */
    int updateStockById(int quantity, String productId)throws SQLException;

    /**
     * 通过用户ID 清空购物车
     *
     * @param userId 用户ID
     * @return 受影响的 行数
     * @exception SQLException 选择抛出异常  然后执行事务回滚
     * */
    int emptyCart(String userId)throws SQLException;


    /**
     * 通过用户ID 查询购物车中商品总价  用于展示在页面的总价位置
     *
     * @param userId 用户ID
     * @return 购物车商品总价
     * */
    double queryTotal(String userId);

    /**
     * 通过商品ID和用户ID 查询用户的购物车中是否添加过此商品
     * 如果添加过就在原数量的的基础上进行添加，否则就新建购物车信息
     *
     * @param productId 商品ID
     * 		  userId    用户ID
     * @return 购物车ID 用来判断购物车中是否已经存在该商品
     * */
    String queryProductById(String productId, String userId);
}
